<?php
/**
 * APM 
 * @App	
 * @Group 
 * @Action ApmService
 * @author lilei
 * @date 2019年1月19日
 * @method send()
 * @method getTransaction($name)
 * @method startTransaction($name)
 * @method stopTransaction($name)
 * @method getConfig()
 * @method captureThrowable($thrown)
 * 
 */
namespace app\common\service;
use app\common\library\CommonFun;

class ApmService {
	/**
	 * APM
	 * @var\ PhilKra\Agent
	 */
	private $agent;
	
	/**
	 * 构造函数
	 * @param string $serverAppName 服务器App名称
	 */
	public function __construct( $serverAppName="" ) {
		// 获取配置文件
		CommonFun::get_other_config("ApmConfig",2);
		// 加载配置
		$config = config( "apm_server_config" );
		// 服务器App名称
		if ( $serverAppName ) {
			$config['appName'] = $serverAppName;
		}
		// 初始化客户端
		$this->agent = new \PhilKra\Agent($config);
	}
	
	/**
	 * 返回单例模型
	 * @return static
	 */
	public static function getInstance() {
		$param = func_get_args ();
		return CommonFun::get_instance_of ( get_called_class (), '', $param );
	}
	
	/**
	 * 匿名方法
	 * @param string $method
	 * @param array $args
	 */
	public function __call( $method, $args ) {
		if(method_exists($this->agent, $method)){
			return call_user_func_array(array($this->agent,$method), $args);
		}else{
			throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
			return array();
		}
	}
	
}